package com.njy.controller;

import com.alibaba.fastjson.JSONObject;
import com.njy.pojo.Constant;
import com.njy.utils.Aes128Utils;
import com.njy.utils.RsaSecretUtils;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.NoSuchAlgorithmException;
import java.util.Map;

@RestController
@RequestMapping("/secret")
public class Secret {

    @PostMapping("/publicEncodeAesKey")
    public String publicEncodeAesKey(String AesKey){
        return RsaSecretUtils.publicKeyEncrypt(AesKey, Constant.RSA_PUBLIC_KEY);
    }

    @PostMapping("/publicDecodeAesKey")
    public String publicDecodeAesKey(String AesKey){
        return RsaSecretUtils.publicKeyDecrypt(AesKey, Constant.RSA_PUBLIC_KEY);
    }

    @PostMapping("/getAesKey")
    public String getAseKey(){
        String aesKey = null;
        try {
             aesKey = Aes128Utils.generateKey();
        } catch (NoSuchAlgorithmException e) {
            aesKey = Constant.AES_DEFAULT_SECRET_KEY;
        }
        return aesKey;
    }

    /**
     * 模拟客户端获取aeskey
     * 将aeskey用rsa公钥加密
     * @param content
     * @return
     */
    @PostMapping("/aesKeyEncodeContent")
    public String aesKeyEncodeContent(@RequestBody String content){
      //  System.out.println(content);
        JSONObject jsonObject = new JSONObject();
        String aesKey = getAseKey();
        String aesKeyEncodeContent = Aes128Utils.encode(content, aesKey);
        String rasEncodeAesKey = publicEncodeAesKey(aesKey);
        jsonObject.put("aesKey",aesKey); //aes密钥
        jsonObject.put("rasEncodeAesKey",rasEncodeAesKey); //rsa公钥将aes密钥加密
        jsonObject.put("aesKeyEncodeContent",aesKeyEncodeContent); //aes密钥加密后的内容
        return jsonObject.toJSONString();
    }

    /**
     *模拟客户端获取响应后进行解密
     */
    @PostMapping("/clientRespDecode")
    public String clientRespDecode(@RequestBody JSONObject jsonObject){
        String aesKey = (String) jsonObject.get("aesKey");
        String content = (String) jsonObject.get("content");
        String decodeAesKey = publicDecodeAesKey(aesKey);
        String decodeContent = Aes128Utils.decode(content,decodeAesKey);
        JSONObject json = new JSONObject();
        json.put("decodeAesKey",decodeAesKey);
        json.put("decodeContent",decodeContent);
        return json.toJSONString();
    }

}
